commonlibsse_ng\skse\interfaces/
scaleform.rs1use crate::re::GFxValue::GFxValue;
11use crate::re::{GFxMovieView, InventoryEntryData::InventoryEntryData};
12use crate::skse::impls::stab::SKSEScaleformInterface;
13use core::ffi::{CStr, c_void};
14
15type RegCallback = fn(a_view: *mut GFxMovieView, a_root: *mut GFxValue) -> bool;
16type RegInvCallback =
17 fn(a_view: *mut GFxMovieView, a_object: *mut GFxValue, a_item: *mut InventoryEntryData);
18
19#[derive(Debug, Clone)]
20pub struct ScaleformInterface(&'static SKSEScaleformInterface);
21
22impl ScaleformInterface {
23 pub const VERSION: u32 = 2;
24
25 #[inline]
26 pub(crate) const fn new(interface: &'static SKSEScaleformInterface) -> Self {
27 Self(interface)
28 }
29
30 #[inline]
31 pub const fn version(&self) -> u32 {
32 self.0.interfaceVersion
33 }
34
35 pub fn register(&self, callback: RegCallback, name: &CStr) -> bool {
36 #[allow(clippy::fn_to_numeric_cast_any)]
37 let void_callback = (callback as *mut RegInvCallback).cast::<c_void>();
38 let result = unsafe { (self.0.Register)(name.as_ptr(), void_callback) };
39
40 if !result {
41 #[cfg(feature = "tracing")]
42 tracing::error!("Failed to register scaleform callback: {:?}", name);
43 };
44 result
45 }
46
47 #[inline]
48 pub fn register_for_inventory(&self, callback: RegInvCallback) {
49 #[allow(clippy::fn_to_numeric_cast_any)]
50 let void_callback = (callback as *mut RegInvCallback).cast::<c_void>();
51 unsafe { (self.0.RegisterForInventory)(void_callback) }
52 }
53}